/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package co.edu.senaclem.atus.vista;

import co.edu.senaclem.logica.AreaLogicaLocal;
import co.edu.senaclem.logica.DependenciaLogicaLocal;
import co.edu.senaclem.logica.ReportesLogicaLocal;
import co.edu.senaclem.logica.UsuariosLogicaLocal;
import co.edu.senaclem.modelo.Area;
import co.edu.senaclem.modelo.Dependencia;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.ejb.EJB;
import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.RequestScoped;
import javax.faces.context.ExternalContext;
import javax.faces.context.FacesContext;
import javax.faces.model.SelectItem;
import javax.servlet.http.HttpServletRequest;
import org.primefaces.component.commandbutton.CommandButton;
import org.primefaces.component.selectonemenu.SelectOneMenu;

/**
 *
 * @author anfeles
 */
@ManagedBean(name = "reportesAtusVista")
@RequestScoped
public class ReportesVista {

    @EJB
    private UsuariosLogicaLocal usuariosLogica;

    @EJB
    private AreaLogicaLocal areaLogica;

    @EJB
    private DependenciaLogicaLocal dependenciaLogica;

    @EJB
    private ReportesLogicaLocal reportesLogica;

    private SelectOneMenu cmbTipoReporte;
    private SelectOneMenu cmbDependencia;
    private SelectOneMenu cmbArea;
    private CommandButton btnGenerar;
    private CommandButton btnLimpiar;
    private Date fechaIni;
    private Date fechaFin;
    private ArrayList<SelectItem> itemsDependencia = null;
    private ArrayList<SelectItem> itemsArea = null;

    public ArrayList<SelectItem> getItemsDependencia() {
        if (itemsDependencia == null) {
            itemsDependencia = new ArrayList<SelectItem>();
            List<Dependencia> lista;
            try {
                lista = dependenciaLogica.consultar(); //llama al factory
                for (int i = 0; i < lista.size(); i++) {
                    itemsDependencia.add(new SelectItem(lista.get(i).getCodigo(), lista.get(i).getNombre()));
                }
            } catch (Exception ex) {
                Logger.getLogger(ReportesVista.class.getName()).log(Level.SEVERE, null, ex);
            }
        }

        return itemsDependencia;
    }

    public void setItemsDependencia(ArrayList<SelectItem> itemsDependencia) {
        this.itemsDependencia = itemsDependencia;
    }

    public ArrayList<SelectItem> getItemsArea() {
        //se debe llenar al inicio para que se pueda setear mas adelante
        if (itemsArea == null) {
            itemsArea = new ArrayList<SelectItem>();
            List<Area> lista;
            try {
                lista = areaLogica.consultar(); //llama al factory
                for (int i = 0; i < lista.size(); i++) {
                    itemsArea.add(new SelectItem(lista.get(i).getCodigo(), lista.get(i).getNombre()));
                }
            } catch (Exception ex) {
                Logger.getLogger(ReportesVista.class.getName()).log(Level.SEVERE, null, ex);
            }
        }

        return itemsArea;
    }

    public void setItemsArea(ArrayList<SelectItem> itemsArea) {
        this.itemsArea = itemsArea;
    }

    public SelectOneMenu getCmbTipoReporte() {
        return cmbTipoReporte;
    }

    public void setCmbTipoReporte(SelectOneMenu cmbTipoReporte) {
        this.cmbTipoReporte = cmbTipoReporte;
    }

    public SelectOneMenu getCmbDependencia() {
        return cmbDependencia;
    }

    public void setCmbDependencia(SelectOneMenu cmbDependencia) {
        this.cmbDependencia = cmbDependencia;
    }

    public SelectOneMenu getCmbArea() {
        return cmbArea;
    }

    public void setCmbArea(SelectOneMenu cmbArea) {
        this.cmbArea = cmbArea;
    }

    public CommandButton getBtnGenerar() {
        return btnGenerar;
    }

    public void setBtnGenerar(CommandButton btnGenerar) {
        this.btnGenerar = btnGenerar;
    }

    public CommandButton getBtnLimpiar() {
        return btnLimpiar;
    }

    public void setBtnLimpiar(CommandButton btnLimpiar) {
        this.btnLimpiar = btnLimpiar;
    }

    public Date getFechaIni() {
        return fechaIni;
    }

    public void setFechaIni(Date fechaIni) {
        this.fechaIni = fechaIni;
    }

    public Date getFechaFin() {
        return fechaFin;
    }

    public void setFechaFin(Date fechaFin) {
        this.fechaFin = fechaFin;
    }

    public void onDependenciaChange() {
        if (usuariosLogica.validarSesion()) {
            try {
                //System.out.println("onDependenciaChange");
                String dependencia = cmbDependencia.getValue().toString();
                //System.out.println("dependencia seleccionada: " + dependencia);
                itemsArea = new ArrayList<SelectItem>();
                List<Area> lista = areaLogica.consultar(Integer.parseInt(dependencia));
                for (int i = 0; i < lista.size(); i++) {
                    itemsArea.add(new SelectItem(lista.get(i).getCodigo(), lista.get(i).getNombre()));
                }
                setItemsArea(itemsArea);
            } catch (Exception e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        } else {
            try {
                FacesContext.getCurrentInstance().getExternalContext().redirect("../SesionInvalida.xhtml");
            } catch (IOException ex) {
                Logger.getLogger(ReportesVista.class.getName()).log(Level.SEVERE, null, ex);
            }
        }

    }

    public void onTipoChange() {
        if (usuariosLogica.validarSesion()) {
            //System.out.println("onTipoChange");
            String tipo = cmbTipoReporte.getValue().toString();
            //System.out.println("tipo seleccionado: " + tipo);

            if (tipo.equals("1")) {
                cmbDependencia.setDisabled(false);
                cmbArea.setDisabled(true);
            } else if (tipo.equals("3")) {
                cmbDependencia.setDisabled(true);
                cmbArea.setDisabled(true);
            } else {
                cmbDependencia.setDisabled(false);
                cmbArea.setDisabled(false);
            }
        } else {
            try {
                FacesContext.getCurrentInstance().getExternalContext().redirect("../SesionInvalida.xhtml");
            } catch (IOException ex) {
                Logger.getLogger(ReportesVista.class.getName()).log(Level.SEVERE, null, ex);
            }
        }

    }

    public void limpiar_action() {
        //System.out.println("Limpiar");
        if (usuariosLogica.validarSesion()) {
            fechaIni = null; //se pone en null la variable date que apunta al value del calendar
            fechaFin = null; //se pone en null la variable date que apunta al value del calendar
            cmbArea.setValue("-1");
            cmbDependencia.setValue("-1");
            cmbTipoReporte.setValue("-1");
        } else {
            try {
                FacesContext.getCurrentInstance().getExternalContext().redirect("../SesionInvalida.xhtml");
            } catch (IOException ex) {
                Logger.getLogger(ReportesVista.class.getName()).log(Level.SEVERE, null, ex);
            }
        }

    }

    public void generarReporte_action() {
        if (usuariosLogica.validarSesion()) {
            try {
                FacesContext fc = FacesContext.getCurrentInstance();
                ExternalContext ec = fc.getExternalContext();
                HttpServletRequest sr = ((HttpServletRequest) ec.getRequest());
                String scheme = sr.getScheme();
                String serverName = sr.getServerName();
                int port = sr.getServerPort();
                String contextPath = sr.getContextPath();
                String url = scheme + "://" + serverName + ":" + port + contextPath;

                String tipo = cmbTipoReporte.getValue().toString();
                if (tipo.equals("1")) //Número de Clientes Atendidos en una Dependencia
                {
                    reportesLogica.generarReporteDependencia(url, fechaIni, fechaFin, Integer.parseInt(cmbDependencia.getValue().toString()));
                } else if (tipo.equals("2")) //Número de Clientes Atendidos por Área
                {
                    reportesLogica.generarReporteArea(url, fechaIni, fechaFin, Integer.parseInt(cmbArea.getValue().toString()));

                } else //Número de Clientes Atendidos por Cada Dependencia
                {
                    reportesLogica.generarReporteTotalDependencias(url, fechaIni, fechaFin);
                }

            } catch (Exception ex) {
                FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR, "Error: ", ex.getMessage()));
            }

        } else {
            try {
                FacesContext.getCurrentInstance().getExternalContext().redirect("../SesionInvalida.xhtml");
            } catch (IOException ex) {
                Logger.getLogger(ReportesVista.class.getName()).log(Level.SEVERE, null, ex);
            }
        }

    }

}
